package main

import (
	"archive/zip"
	"errors"
	"github.com/spf13/viper"
	"io"
	"os"
	"path"
	"path/filepath"
	"strings"
)

// extractFile 提取ZIP内的文件到指定路径
func ExtractFile(zf *zip.File, filePath string) error {
	err := Mkdirs(filePath)
	if err != nil {
		return err
	}
	rc, err := zf.Open()
	if err != nil {
		return err
	}
	defer rc.Close()
	filePath = JoinPathWithRoot(filePath)
	f, err := os.Create(filePath)
	if err != nil {
		return err
	}
	defer f.Close()

	_, err = io.Copy(f, rc)
	return err
}

func Mkdirs(filePath string) error {
	// 获取文件所在目录的路径
	dirPath := filepath.Dir(filePath)

	// 检查目录是否存在，不存在则创建
	if _, err := os.Stat(dirPath); os.IsNotExist(err) {
		// 使用MkdirAll创建缺失的目录，权限设置为0755
		if err = os.MkdirAll(dirPath, 0755); err != nil {
			return errors.New("创建目录失败：" + err.Error())
		}
		logger.Printf("创建目录'%s'", dirPath)
	}
	return nil
}

func JoinPathWithRoot(filePath string) string {
	if strings.HasPrefix(filePath, "./") {
		filePath = path.Join(viper.GetString("nginx.root"), filePath)
	}
	return filePath
}
